ansistring&Tfilestream

Otázka od: Martin Kolos

9. 9. 2002 9:53

ahojte
mam soubory ruznych velikosti (radove 500 B) ve kterych potrebuji upravit
par znaku. Prvni co me napadlo, bylo otevrit soubor pomoci metody
Tfilestream.create a nacist obsah do promenne S typu string

Tfilestream.ready(S,sizeof(soubor))

a zde nastava problem, nebot jak znamo, S odkazuje na adresu v pameti,
tedy je to neco jako ukazatel.
Neni problem najit jine reseni (napr. pokud S bude typu shortstring je
vse bez problemu), nicmene by me zajimalo jestli se da a jak pouzit v
metode ready promenna typu ansistring.

A jeste jednu otazku: Kdy musim pouzit fci setlength pro nastaveni
velikosti promenne typu string, kdyz napriklad bezne pouzivane
S:='aaaaaaaaaa'
funguje i bez pouziti teto funkce (a velikost S odpovida
poctu vlozenych znaku)?

Odpovedá: Vaclav Sazima

10. 9. 2002 21:05

 Ahoj

Martin Kolos wrote:
>
> par znaku. Prvni co me napadlo, bylo otevrit soubor pomoci metody
> Tfilestream.create a nacist obsah do promenne S typu string
>
> Tfilestream.ready(S,sizeof(soubor))

  FileStream := Tfilestream.create (FileName,fmOpenRead);
  setkength (S,FileStream.Size);
  FileStream.Read (S [1],FileStream.Size);
  FileStream.Free;
>
> a zde nastava problem, nebot jak znamo, S odkazuje na adresu v pameti,
> tedy je to neco jako ukazatel.
                      Vaclav Sazima

Odpovedá: Jan Sebelík

10. 9. 2002 14:47

> Odesílatel: Martin Kolos <koki@monoceros.physics.muni.cz>
> A jeste jednu otazku: Kdy musim pouzit fci setlength pro nastaveni
> velikosti promenne typu string, kdyz napriklad bezne pouzivane
> S:='aaaaaaaaaa'
> funguje i bez pouziti teto funkce (a velikost S odpovida
> poctu vlozenych znaku)?

A co kdyz tu pozadovanou delku predem neznas?
Preci nebudes psat
S:='';
for i:=1 to Size do
  S:=S+'a';

Navic je treba si uvedomit, ze Pointer(prazdnyretezec)=nil.
To je pikantni napr. tehdy, kdyz volam WinAPI funkci, ktera mi vraci nejaky
retezec do promenne prazdnyretezec.
Navic je dobre si uvedomit, ze lokalni promenne (uvnitr procedur) typu String
jsou na "begin" vzdy inicializovany na prazdny retezec.

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 0434 692 569 (0776 347735)
=========================================